"use strict";
// 如何在ts中声明变量, 并指定变量的类型
//         布尔类型（boolean）
//         数字类型（number）
//         字符串类型(string)
//         数组类型（array）
//         元组类型（tuple）
//         枚举类型（enum）
//             枚举类型（enum）
//                 随着计算机的不断普及，程序不仅只用于数值计算，还更广泛地用于处理非数值的数据。
//                 例如：性别、月份、星期几、颜色、单位名、学历、职业等，都不是数值数据。  
//                 在其它程序设计语言中，一般用一个数值来代表某一状态，这种处理方法不直观，易读性差。
//                 如果能在程序中用自然语言中有相应含义的单词来代表某一状态，则程序就很容易阅读和理解。
//                 也就是说，事先考虑到某一变量可能取的值，尽量用自然语言中含义清楚的单词来表示它的每一个值，
//                 这种方法称为枚举方法，用这种方法定义的类型称枚举类型。
//                  enum 枚举名{ 
//                 标识符[=整型常数], 
//                 标识符[=整型常数], 
//                 ... 
//                 标识符[=整型常数], 
//             } ;
//         任意类型（any）
//         null 和 undefined
//         void类型  空类型
//         never类型
// 声明boolean类型的变量
// let flag:boolean = true; // flag定义布尔类型
// flag = "helloworld";  // flag已定义布尔类型  定义字符串类型会报错
// console.log(flag);
// let flag:boolean = false;  // flag定义布尔类型
// // flag = 123;   // flag已定义布尔类型  定义数值类型会报错
// console.log(flag);
// let flag:boolean=false; 
// console.log(flag);
// let flag:boolean =false;
// console.log(flag);
// let flag:boolean=false;
// console.log(flag);
// 声明数字类型的变量
// let num:number = 123;  // 定义num为数字类型
// // num = "123";  // num已定义数字类型  定义字符串类型会报错
// console.log(num);
// let num:number = 123;  // 定义num为数字类型
// // num = true;  // num已定义数字类型  定义布尔类型会报错
// console.log(num);
// let num:number=123;
// console.log(num);
// let num:number=123;
// console.log(num)
// let num:number=123;
// console.log(num);
// 声明数组有两种方式     
// 第一种:
// let arr: any[] = [1, "2", "3", 4, 5, 6, true, null]; // any类型 数组里可以放任意类型
// console.log(arr);
// let arr:any[]=[1, "2", "3", 4, 5, 6, true, null];
// console.log(arr);
// let arr:any[]=[1, "2", "3", 4, 5, 6, true, null];
// console.log(arr);
// let arr:any[]=[1, "2", "3", 4, 5, 6, true, null];
// console.log(arr);
// let arr:any[]=[1, "2", "3", 4, 5, 6, true, null];
// console.log(arr);
// 第二种:
// let list : Array<any> = [1, "2", "3", 4, 5, 6, true, null] // any类型 数组里可以放任意类型
// console.log(list);
// let list:Array<any>=[1, "2", "3", 4, 5, 6, true, null];
// console.log(list);
// let list:Array<any>=[1, "2", "3", 4, 5, 6, true, null];
// console.log(list);
// let list:Array<any>=[1, "2", "3", 4, 5, 6, true, null];
// console.log(list);
// let list:Array<any>=[1, "2", "3", 4, 5, 6, true, null];
// console.log(list);
// 声明元组类型的方式  enum 元组名
// 现金   0   cash
// 微信   1   wechat
// 支付宝 2   alipay
// 银行卡 3   bankcard
// enum payType {
//     cash = 0 ,
//     wechat = 1 ,
//     alipay = 2 ,
//     bankcard = 3 ,
// }
// console.log(payType);  // 输出payType数组
// let pay:number = payType.cash;  // 创建变量pay设置类型为number  获取payType中的cash
// console.log(pay);
// enum payType{
//     cash=0,
//     wechat=1,
//     alipay=2,
//     bankcard=3,
// }
// console.log(payType);
// let pay:number = payType.cash;
// console.log(pay);
// 任意类型
// let a:any = 100;  // a可以设置成任意类型
// a = "hello";  
// a = true;
// a = undefined;
// console.log(a);
// null类型 和 undefined类型
// let num:null = null;
// console.log(num);
// let sum:undefined = undefined;
// console.log(sum);
// void类型  函数用  // any 是表示任意类型，而 void 是表示没有任意类型，
// 就是什么类型都不是，这在我们定义函数，函数没有返回值时会用到
// function box():void{
//     console.log("123");
// }
// box();
// never类型
// never 类型指那些永不存在的值的类型，它是那些总会抛出异常或根本不会有返回值的函数表达式的返回值类型，
// 当变量被永不为真的类型保护（后面章节会详细介绍）所约束时，该变量也是 never 类型
// let a: never;
// a = null;
// let a = (message:string):never=>{
//     throw new Error(message);
// }
// console.log(a);
// object类型
// object 在 JS 中是引用类型，它和 JS 中的其他基本类型不一样，
// 像 number、string、boolean、undefined、null 这些都是基本类型，
// 这些类型的变量存的是他们的值，而 object 类型的变量存的是引用，看个简单的例子
// let objInt = { a: "aa", b: "bb" };
// console.log(objInt);
// let objClone = objInt.a;
// console.log(objClone);
// objInt.a = "cc";
// console.log(objInt.a);
// let objInt={a: "aa", b: "bb" }
// console.log(objInt);
// let objClone=objInt.a;
// console.log(objClone);
// objInt.a="cc"
// console.log(objInt.a);
